#include <head.h>

// 线程函数，返回一个指针作为返回值
void *thread_function(void *arg)
{
    int *value = (int *)arg; // 将void指针转换为整数指针
    printf("Thread received value: %d\n", *value);
    sleep(3);                    // 模拟线程执行一段时间
    *value = 2;                  // 修改传递进来的值
    pthread_exit((void *)value); // 通过pthread_exit返回值
    // 或者
}

int main()
{
    pthread_t tid;
    int value = 42;
    void *retval;

    // 创建线程，并传递参数
    if (pthread_create(&tid, NULL, thread_function, (void *)&value) != 0)
    {
        fprintf(stderr, "Failed to create thread\n");
        return 1;
    }

    // 等待线程结束，并获取返回值
    if (pthread_join(tid, &retval) != 0)
    {
        fprintf(stderr, "Failed to join thread\n");
        return 1;
    }

    // 获取线程函数返回的值，并打印
    int *result = (int *)retval;
    printf("Main thread received value: %d\n", *result);

    // 释放返回值的内存，这里不是必须的，因为返回的是指针，不是动态分配的内存
    // free(result);

    printf("Main thread exiting\n");

    return 0;
}
